#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<functional>
#include<vector>
#include<sys/wait.h>

void PrintPending(sigset_t &pending)
{
    std::cout<<"[pid: ]"<<getpid()<<"]"<<"sigpending list:";
    //穷举所有的信号
    for(int i=31;i>0;i--)
    {
        if(sigismember(&pending,i))
        {
            std::cout<<"1";
        }
        else{
            std::cout<<"0";
        }
    }               
    std::cout<<"\r\n";
}
int main()
{
    //1、屏蔽2号信号
    sigset_t block,oblock;
    //清空的函数
    sigemptyset(&block);
    sigemptyset(&oblock);

    //添加2号信号到该位图
    sigaddset(&block,SIGINT);//把第二个比特位置1，但是没设置到内核中呢
    //2、设置内核的信号屏蔽字
    sigprocmask(SIG_SETMASK,&block,&block);

    
    while(1)
    {
        //3、获取当前进程的pending信号集
        sigset_t pending;
        sigemptyset(&pending);//清空

        sigpending(&pending);

        //4、不断打印pending信号集中的信号
        PrintPending(pending);
        sleep(1);
    }
    

    return 0;
}